// exports.AL_Framework_Storage_Obj = void 0;
// var $bitEncrypt = require("./AL_Framework_Bit_Encrypt");
// var a = (function () {
//     function t() {
//         this._hand = "";
//         this._key = "";
//         this._debug_key_list = null;
//         this._remote_key_list = [];
//     }
//     t.prototype.shezhi_cunchu_qianzhui = function (e) {
//         this._hand = e;
//     };
//     t.prototype.shezhi_key = function (e) {
//         if (e) {
//             this._key = e;
//         }
//     };
//     t.prototype.getItem = function (t, o) {
//         if (void 0 === o) {
//             o = null;
//         }
//         t = this.huoqu_cunchu_key(t);
//         var i = localStorage.getItem(t);
//         if (i) {
//             try {
//                 var n = this.decryption(i);
//                 var a = JSON.parse(n);
//                 return "object" == typeof a &&
//                     2 == Object.keys(a).length &&
//                     a.hasOwnProperty("type") &&
//                     a.hasOwnProperty("value") &&
//                     ("number" == a.type || "string" == a.type || "boolean" == a.type || "object" == a.type)
//                     ? a.value
//                     : a;
//             } catch (e) {
//                 Log.e("StorageGetError! key:" + t, "err:" + e);
//                 return i;
//             }
//         }
//         return o;
//     };
//     t.prototype.setItem = function (t, o, i) {
//         if (void 0 === i) {
//             i = !1;
//         }
//         var n = typeof o;
//         if ("number" == n || "string" == n || "boolean" == n || "object" == n) {
//             if (i) {
//                 this.tianjia_yuancheng_key_list(t);
//             }
//             t = this.huoqu_cunchu_key(t);
//             var a = o;
//             try {
//                 var s = this.encrypt(a);
//                 localStorage.setItem(t, s);
//                 if (-1 != this._remote_key_list.indexOf(t) && ailin_sdk_manager.baocunYouxiShuju) {
//                     ailin_sdk_manager.baocunYouxiShuju(t, s);
//                 }
//             } catch (e) {
//                 Log.e("StorageSetError! key:" + t, "err:" + e);
//             }
//         } else {
//             Log.e("存储数据类型不支持 当前的存储类型: " + n);
//         }
//     };
//     t.prototype.removeItem = function (e) {
//         e = this.huoqu_cunchu_key(e);
//         localStorage.removeItem(e);
//     };
//     t.prototype.tianjia_yuancheng_key_list = function () {
//         var e;
//         var t = this;
//         var o = arguments;
//         "string" == typeof o[0] ? (e = [o[0]]) : Array.isArray(o[0]) && (e = o[0]);
//         if (e) {
//             e.forEach(function (e) {
//                 e = t.huoqu_cunchu_key(e);
//                 if (-1 == t._remote_key_list.indexOf(e)) {
//                     t._remote_key_list.push(e);
//                 }
//             });
//         }
//     };
//     t.prototype.huoqu_yuancheng_key_list = function () {
//         return this._remote_key_list;
//     };
//     t.prototype.huoqu_cunchu_key = function (e) {
//         return this._hand ? this._hand + "_" + e : e;
//     };
//     t.prototype.encrypt = function (e) {
//         return this._key ? $bitEncrypt.AL_Framework_Bit_Encrypt.encode(JSON.stringify(e), this._key) : JSON.stringify(e);
//     };
//     t.prototype.decryption = function (e) {
//         return this._key ? $bitEncrypt.AL_Framework_Bit_Encrypt.decode(e, this._key) : e;
//     };
//     return t;
// })();
// exports.AL_Framework_Storage_Obj = a;


/**
 * @file AL_Framework_Storage_Obj.js
 * @description 存储对象模块，提供本地存储的加密解密及远程同步功能。
 * @version 0.1
 * @author jdk
 */

const $bitEncrypt = require("./AL_Framework_Bit_Encrypt");

/**
 * 存储对象类
 */
class AL_Framework_Storage_Obj {
    constructor() {
        /** @type {string} 存储前缀 */
        this._hand = "";
        /** @type {string} 加密密钥 */
        this._key = "";
        /** @type {Array} 调试密钥 */
        this._debug_key_list = null;
        /** @type {Array} 远程密钥 */
        this._remote_key_list = [];
    }

    /**
     * 设置存储前缀
     * @param {string} hand 存储前缀
     */
    shezhi_cunchu_qianzhui(hand) {
        this._hand = hand;
    }

    /**
     * 设置加密密钥
     * @param {string} key 加密密钥
     */
    shezhi_key(key) {
        if (key) {
            this._key = key;
        }
    }

    /**
     * 获取存储项
     * @param {string} key 存储项键
     * @param {*} [defaultValue=null] 默认值
     * @returns {*} 存储项的值
     */
    getItem(key, defaultValue = null) {
        const storageKey = this.huoqu_cunchu_key(key);
        const item = localStorage.getItem(storageKey);
        if (item) {
            try {
                const decryptedValue = this.decryption(item);
                const parsedValue = JSON.parse(decryptedValue);
                if (typeof parsedValue === 'object' &&
                    Object.keys(parsedValue).length === 2 &&
                    parsedValue.hasOwnProperty('type') &&
                    parsedValue.hasOwnProperty('value') &&
                    ['number', 'string', 'boolean', 'object'].includes(parsedValue.type)) {
                    return parsedValue.value;
                }
                return parsedValue;
            } catch (error) {
                console.error(`StorageGetError! key: ${storageKey}`, `err: ${error}`);
                return item;
            }
        }
        return defaultValue;
    }

    /**
     * 设置存储项
     * @param {string} key 存储项键
     * @param {*} value 存储项的值
     * @param {boolean} [isRemote=false] 是否远程存储
     */
    setItem(key, value, isRemote = false) {
        const valueType = typeof value;
        if (['number', 'string', 'boolean', 'object'].includes(valueType)) {
            if (isRemote) {
                this.tianjia_yuancheng_key_list(key);
            }
            const storageKey = this.huoqu_cunchu_key(key);
            try {
                const encryptedValue = this.encrypt(value);
                localStorage.setItem(storageKey, encryptedValue);
                if (this._remote_key_list.includes(storageKey) && typeof ailin_sdk_manager !== 'undefined' && ailin_sdk_manager.baocunYouxiShuju) {
                    ailin_sdk_manager.baocunYouxiShuju(storageKey, encryptedValue);
                }
            } catch (error) {
                console.error(`StorageSetError! key: ${storageKey}`, `err: ${error}`);
            }
        } else {
            console.error(`存储数据类型不支持 当前的存储类型: ${valueType}`);
        }
    }

    /**
     * 移除存储项
     * @param {string} key 存储项键
     */
    removeItem(key) {
        const storageKey = this.huoqu_cunchu_key(key);
        localStorage.removeItem(storageKey);
    }

    /**
     * 添加远程密钥
     */
    tianjia_yuancheng_key_list() {
        let remoteKeys;
        if (typeof arguments[0] === 'string') {
            remoteKeys = [arguments[0]];
        } else if (Array.isArray(arguments[0])) {
            remoteKeys = arguments[0];
        }
        if (remoteKeys) {
            remoteKeys.forEach(key => {
                const storageKey = this.huoqu_cunchu_key(key);
                if (!this._remote_key_list.includes(storageKey)) {
                    this._remote_key_list.push(storageKey);
                }
            });
        }
    }

    /**
     * 获取远程密钥
     * @returns {Array} 远程密钥数组
     */
    huoqu_yuancheng_key_list() {
        return this._remote_key_list;
    }

    /**
     * 获取存储项键
     * @param {string} key 存储项键
     * @returns {string} 带前缀的存储项键
     */
    huoqu_cunchu_key(key) {
        return this._hand ? `${this._hand}_${key}` : key;
    }

    /**
     * 加密数据
     * @param {*} data 要加密的数据
     * @returns {string} 加密后的数据
     */
    encrypt(data) {
        return this._key ? $bitEncrypt.AL_Framework_Bit_Encrypt.encode(JSON.stringify(data), this._key) : JSON.stringify(data);
    }

    /**
     * 解密数据
     * @param {string} data 要解密的数据
     * @returns {*} 解密后的数据
     */
    decryption(data) {
        return this._key ? $bitEncrypt.AL_Framework_Bit_Encrypt.decode(data, this._key) : data;
    }
}

exports.AL_Framework_Storage_Obj = AL_Framework_Storage_Obj;
